/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.ProcedureDto;
import com.brain.core.dto.ProcesoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.ProcesoManager;
import com.brain.core.manager.RecursosManager;

import com.brain.core.view.util.ConstantesCore;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.primefaces.event.SelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("procesoMBean")
@Scope("session")
public class ProcesoMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(ProcesoMBean.class);
    @Resource
    private ProcesoManager manager;
    @Resource
    private RecursosManager recursosManager;
    private List<ProcesoDto> lista;
    private ProcesoDto dto;
    private ProcesoDto filtroDto;
    private String keyTitulo = "proceso.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;

    private SelectItem[] siSegundos;
    private SelectItem[] siMinutos;
    private SelectItem[] siHoras;
    private SelectItem[] siDiasMes;
    private SelectItem[] siMes;
    private SelectItem[] siDiasSemana;
    private SelectItem[] siAnios;
    
    private ProcedureDto procedureDto;
    
    
    public ProcesoMBean() {
    }
    
    
    
    

    public String iniciar() {
        this.lista = null;
        this.filtroDto = new ProcesoDto();
        this.filtroDto.setProcedureDto(new ProcedureDto());
        this.filtroDto.setEstado(Boolean.TRUE);
        return ConstantesCore.UrlNavegacion.URL_LISTA_PROCESOS;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesCore.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));

        this.dto = new ProcesoDto();
        this.dto.setExpAnio(com.brain.core.common.ConstantesCore.ExpresionQuartzCodigos.TODOS);
        this.dto.setExpMes(com.brain.core.common.ConstantesCore.ExpresionQuartzCodigos.TODOS);
        this.dto.setExpDiaMes(com.brain.core.common.ConstantesCore.ExpresionQuartzCodigos.TODOS);
        this.dto.setExpDiaSemana(com.brain.core.common.ConstantesCore.ExpresionQuartzCodigos.TODOS);
        this.dto.setExpHora(0);
        this.dto.setExpMinuto(0);
        this.dto.setExpSegundo(0);
        this.dto.setEstado(Boolean.TRUE);
        return ConstantesCore.UrlNavegacion.URL_PROCESO;
    }
    
    
        

    public String editar() {
        sessionMBean.setAccion(ConstantesCore.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_PROCESO;
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesCore.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_PROCESO;
    }

    public void buscar() {
        try {            
            this.lista = this.manager.obtenerProcesos(this.filtroDto);
        } catch (DAOException ex) {
            logger.error(ex);
            showError("Error de Sistema", ex.getMessage());
        }
    }

    public String guardar() {

        String to = null;
        String mensajeTrx = "";

        if (sessionMBean.getAccion() == ConstantesCore.Formulario.NUEVO) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.nuevo(this.dto);
                to = ConstantesCore.UrlNavegacion.URL_LISTA_PROCESOS;
            } catch (Exception ex) {
                logger.error("ERROR DE SISTEMA", ex);
                to = null;
            }
        }
        if (sessionMBean.getAccion() == ConstantesCore.Formulario.EDITAR) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.editar(this.dto);
                to = ConstantesCore.UrlNavegacion.URL_LISTA_PROCESOS;
            } catch (Exception ex) {
                logger.error("ERROR DE SISTEMA", ex);
                to = null;
            }
        }

        if (to == null) {
            mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.error");
            showError(mensajeTrx);
        } else {
            mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
            showMessage(mensajeTrx);

        }

        return to;
    }

    public String retroceder() {
        return ConstantesCore.UrlNavegacion.URL_LISTA_PROCESOS;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public ProcesoDto getDto() {
        return dto;
    }

    public void setDto(ProcesoDto dto) {
        this.dto = dto;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<ProcesoDto> getLista() {
        return lista;
    }

    public void setLista(List<ProcesoDto> lista) {
        this.lista = lista;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ProcesoMBean.logger = logger;
    }

    public ProcesoManager getManager() {
        return manager;
    }

    public void setManager(ProcesoManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public SelectItem[] getSiAnios() {
        return this.recursosManager.siEnteros(2000,2060,true,false,false,false);
    }

    public void setSiAnios(SelectItem[] siAnios) {
        this.siAnios = siAnios;
    }

    public SelectItem[] getSiDiasMes() {
        return this.recursosManager.siEnteros(1,31,true,false,false,true);
    }

    public void setSiDiasMes(SelectItem[] siDiasMes) {
        this.siDiasMes = siDiasMes;
    }

    public SelectItem[] getSiDiasSemana() {
        return this.recursosManager.siDiasSemana(true,true);
    }

    public void setSiDiasSemana(SelectItem[] siDiasSemana) {
        this.siDiasSemana = siDiasSemana;
    }

    public SelectItem[] getSiHoras() {
       return this.recursosManager.siEnteros(0,23,true,false,false,false);
    }

    public void setSiHoras(SelectItem[] siHoras) {
        this.siHoras = siHoras;
    }

    public SelectItem[] getSiMes() {
        return this.recursosManager.siMesesAnio(true);
    }

    public void setSiMes(SelectItem[] siMes) {
        this.siMes = siMes;
    }

    public SelectItem[] getSiMinutos() {
        return this.recursosManager.siEnteros(0,60,true,false,false,false);
    }

    public void setSiMinutos(SelectItem[] siMinutos) {
        this.siMinutos = siMinutos;
    }

    public SelectItem[] getSiSegundos() {
        return this.recursosManager.siEnteros(0,60,true,false,false,false);
    }

    public void setSiSegundos(SelectItem[] siSegundos) {
        this.siSegundos = siSegundos;
    }

    public ProcesoDto getFiltroDto() {
        return filtroDto;
    }

    public void setFiltroDto(ProcesoDto filtroDto) {
        this.filtroDto = filtroDto;
    }

    

    public ProcedureDto getProcedureDto() {
        return procedureDto;
    }

    public void setProcedureDto(ProcedureDto procedureDto) {
        this.procedureDto = procedureDto;
    }
    
   
    
    
    
    
}
